package com.zl.tesseract.scanner.retrofit;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.Multipart;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;

/**
 * HttpService.
 * @author: zhangyan
 * @date: 2018/8/30
 */
public interface HttpService {

   /**
    * 发送get请求
    * @param url 地址
    * @param map 参数
    * @return json串
    */
   @GET
   Call<String> getRequestData(@HeaderMap Map<String, String> headers, @Url String url, @QueryMap LinkedHashMap<String, String> map);

   /**
    * 发送post请求
    * @param headers 请求头参数
    * @param url 地址
    * @param map 参数体
    * @return json串
    */
   @FormUrlEncoded
   @POST
   Call<String> postRequestData(@HeaderMap Map<String, String> headers, @Url String url, @FieldMap LinkedHashMap<String, String> map);

   /**
    * 发送patch请求
    * @param headers 请求头参数
    * @param url 地址
    * @param map 参数体
    * @return json串
    */
   @FormUrlEncoded
   @PATCH
   Call<String> patchRequestData(@HeaderMap Map<String, String> headers, @Url String url, @FieldMap LinkedHashMap<String, String> map);

   /**
    * 上传图片
    */
   @Multipart
   @POST
   Call<String> postUploadFile(@HeaderMap Map<String, String> headers, @Url String url, @Part List<MultipartBody.Part> fileList);

   /**
    * 下载文件
    */
   @GET
   Call<ResponseBody> getDownloadFile(@Url String url);

   /**
    * 发送Delete请求
    * @param headers 请求头参数
    * @param url 地址
    * @param map 参数体
    * @return json串
    */
   @DELETE
   Call<String> deleteRequestData(@HeaderMap Map<String, String> headers, @Url String url, @QueryMap LinkedHashMap<String, String> map);

   /**
    * 发送put请求
    * @param headers 请求头参数
    * @param url 地址
    * @param map 参数体
    * @return json串
    */
   @FormUrlEncoded
   @POST
   Call<String> putRequestData(@HeaderMap Map<String, String> headers, @Url String url, @FieldMap LinkedHashMap<String, String> map);


}
